An information processing device is a device capable of running a program. A program may be any sequence of digital data operations. A program may be defined by instructions residing in a programmable or non programmable memory unit of the device. Running a program may involve maintaining a call stack consisting of a variable number of stack items.
A stack may be defined as a sequence of data items that may be increased by appending new items at the end of the sequence and reduced by removing items from the end of the sequence. A stack may be implemented, for example, by means of a last-in first-out (LIFO) buffer. Adding an item to the stack is also referred to as pushing the item to the stack. Removing an item from the stack is also referred to as popping the item from the stack.
It is noted that a program may have a nested structure. For example, a program may comprise calls to various subroutines, and these subroutines may in turn comprise calls to subroutines which in turn may comprise calls to subroutines, and so on. Whenever a subroutine is called, a return address may be pushed to the stack, the return address indicating an instruction which is to be performed after the subroutine has been executed. When the subroutine has been terminated and the return address has been read from the stack, the return address may be popped from the stack.
A call stack is an example of a stack. A call stack may notably comprise information about active processes, threads or subroutines of the program. A call stack may thus be defined as a stack containing process flow information. The content of the call stack can therefore be vital for the proper functioning of the information processing device. For example, any error in a return address may cause the information processing device to process instructions which are completely unrelated to current data values kept in a memory unit of the information processing device. Usually an error in a call stack may cause the information processing device to crash.